From 6cafb62e9b76d0c7c6ff9e0acf03a5f7bc39fac0 Mon Sep 17 00:00:00 2001 From: Daniel Boles Date: Sun, 8 Oct 2017 13:15:33 +0100 Subject: [PATCH] testmenubutton: Fix inverted keynav in the GtkMenu MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit GtkMenu’s own keynav code, which actually bothers to account for the layout of items, only happens if columns > 1. So, adding items to 1 column using a reverse loop meant they were placed in the Menu’s list of children in that order, and because we only have 1 column, Menu passes keynav up to MenuShell, which doesn’t adjust for the items’ positions. ‘Fix’ that here by adding items in the same order they’ll have when laid out in the Menu, so keynav does what you’d expect, not the opposite. For that, it’s simpler just to use gtk_container_add(). Let’s presume users are using add(), attach() with a non-inverted loop, or attach() with arguments that create 2+ columns and so GtkMenu keynav. --- tests/testmenubutton.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/tests/testmenubutton.c b/tests/testmenubutton.c index 8de76a4702..62b9ea2226 100644 --- a/tests/testmenubutton.c +++ b/tests/testmenubutton.c @@ -104,23 +104,21 @@ int main (int argc, char **argv) /* Button with GtkMenu */ menu_widget = gtk_menu_new (); - for (i = 5; i > 0; i--) { + for (i = 0; i < 5; ++i) { GtkWidget *item; - if (i == 3) { + if (i == 2) { item = gtk_menu_item_new_with_mnemonic ("_Copy"); } else { char *label; - label = g_strdup_printf ("Item _%d", i); + label = g_strdup_printf ("Item _%d", i + 1); item = gtk_menu_item_new_with_mnemonic (label); g_free (label); } + gtk_menu_item_set_use_underline (GTK_MENU_ITEM (item), TRUE); - gtk_menu_attach (GTK_MENU (menu_widget), - item, - 0, 1, - i - 1, i); + gtk_container_add (GTK_CONTAINER (menu_widget), item); } gtk_widget_show (menu_widget); -- 2.30.2